package com.moez.QKSMS.common.utils;

import android.text.TextUtils;
import android.util.SparseIntArray;

/**
 * Helper class for all things Emoji
 *
 * Modified from https://github.com/rockerhieu/emojicon/blob/master/library/src/main/java/com/rockerhieu/emojicon/EmojiconHandler.java
 */
public class EmojiUtils {

    private static final SparseIntArray sEmojisMap = new SparseIntArray(846);
    private static final SparseIntArray sSoftbanksMap = new SparseIntArray(471);

    static {
        // People
        sEmojisMap.put(0x1f604, 1);
        sEmojisMap.put(0x1f603, 1);
        sEmojisMap.put(0x1f600, 1);
        sEmojisMap.put(0x1f60a, 1);
        sEmojisMap.put(0x263a, 1);
        sEmojisMap.put(0x1f609, 1);
        sEmojisMap.put(0x1f60d, 1);
        sEmojisMap.put(0x1f618, 1);
        sEmojisMap.put(0x1f61a, 1);
        sEmojisMap.put(0x1f617, 1);
        sEmojisMap.put(0x1f619, 1);
        sEmojisMap.put(0x1f61c, 1);
        sEmojisMap.put(0x1f61d, 1);
        sEmojisMap.put(0x1f61b, 1);
        sEmojisMap.put(0x1f633, 1);
        sEmojisMap.put(0x1f601, 1);
        sEmojisMap.put(0x1f614, 1);
        sEmojisMap.put(0x1f60c, 1);
        sEmojisMap.put(0x1f612, 1);
        sEmojisMap.put(0x1f61e, 1);
        sEmojisMap.put(0x1f623, 1);
        sEmojisMap.put(0x1f622, 1);
        sEmojisMap.put(0x1f602, 1);
        sEmojisMap.put(0x1f62d, 1);
        sEmojisMap.put(0x1f62a, 1);
        sEmojisMap.put(0x1f625, 1);
        sEmojisMap.put(0x1f630, 1);
        sEmojisMap.put(0x1f605, 1);
        sEmojisMap.put(0x1f613, 1);
        sEmojisMap.put(0x1f629, 1);
        sEmojisMap.put(0x1f62b, 1);
        sEmojisMap.put(0x1f628, 1);
        sEmojisMap.put(0x1f631, 1);
        sEmojisMap.put(0x1f620, 1);
        sEmojisMap.put(0x1f621, 1);
        sEmojisMap.put(0x1f624, 1);
        sEmojisMap.put(0x1f616, 1);
        sEmojisMap.put(0x1f606, 1);
        sEmojisMap.put(0x1f60b, 1);
        sEmojisMap.put(0x1f637, 1);
        sEmojisMap.put(0x1f60e, 1);
        sEmojisMap.put(0x1f634, 1);
        sEmojisMap.put(0x1f635, 1);
        sEmojisMap.put(0x1f632, 1);
        sEmojisMap.put(0x1f61f, 1);
        sEmojisMap.put(0x1f626, 1);
        sEmojisMap.put(0x1f627, 1);
        sEmojisMap.put(0x1f608, 1);
        sEmojisMap.put(0x1f47f, 1);
        sEmojisMap.put(0x1f62e, 1);
        sEmojisMap.put(0x1f62c, 1);
        sEmojisMap.put(0x1f610, 1);
        sEmojisMap.put(0x1f615, 1);
        sEmojisMap.put(0x1f62f, 1);
        sEmojisMap.put(0x1f636, 1);
        sEmojisMap.put(0x1f607, 1);
        sEmojisMap.put(0x1f60f, 1);
        sEmojisMap.put(0x1f611, 1);
        sEmojisMap.put(0x1f472, 1);
        sEmojisMap.put(0x1f473, 1);
        sEmojisMap.put(0x1f46e, 1);
        sEmojisMap.put(0x1f477, 1);
        sEmojisMap.put(0x1f482, 1);
        sEmojisMap.put(0x1f476, 1);
        sEmojisMap.put(0x1f466, 1);
        sEmojisMap.put(0x1f467, 1);
        sEmojisMap.put(0x1f468, 1);
        sEmojisMap.put(0x1f469, 1);
        sEmojisMap.put(0x1f474, 1);
        sEmojisMap.put(0x1f475, 1);
        sEmojisMap.put(0x1f471, 1);
        sEmojisMap.put(0x1f47c, 1);
        sEmojisMap.put(0x1f478, 1);
        sEmojisMap.put(0x1f63a, 1);
        sEmojisMap.put(0x1f638, 1);
        sEmojisMap.put(0x1f63b, 1);
        sEmojisMap.put(0x1f63d, 1);
        sEmojisMap.put(0x1f63c, 1);
        sEmojisMap.put(0x1f640, 1);
        sEmojisMap.put(0x1f63f, 1);
        sEmojisMap.put(0x1f639, 1);
        sEmojisMap.put(0x1f63e, 1);
        sEmojisMap.put(0x1f479, 1);
        sEmojisMap.put(0x1f47a, 1);
        sEmojisMap.put(0x1f648, 1);
        sEmojisMap.put(0x1f649, 1);
        sEmojisMap.put(0x1f64a, 1);
        sEmojisMap.put(0x1f480, 1);
        sEmojisMap.put(0x1f47d, 1);
        sEmojisMap.put(0x1f4a9, 1);
        sEmojisMap.put(0x1f525, 1);
        sEmojisMap.put(0x2728, 1);
        sEmojisMap.put(0x1f31f, 1);
        sEmojisMap.put(0x1f4ab, 1);
        sEmojisMap.put(0x1f4a5, 1);
        sEmojisMap.put(0x1f4a2, 1);
        sEmojisMap.put(0x1f4a6, 1);
        sEmojisMap.put(0x1f4a7, 1);
        sEmojisMap.put(0x1f4a4, 1);
        sEmojisMap.put(0x1f4a8, 1);
        sEmojisMap.put(0x1f442, 1);
        sEmojisMap.put(0x1f440, 1);
        sEmojisMap.put(0x1f443, 1);
        sEmojisMap.put(0x1f445, 1);
        sEmojisMap.put(0x1f444, 1);
        sEmojisMap.put(0x1f44d, 1);
        sEmojisMap.put(0x1f44e, 1);
        sEmojisMap.put(0x1f44c, 1);
        sEmojisMap.put(0x1f44a, 1);
        sEmojisMap.put(0x270a, 1);
        sEmojisMap.put(0x270c, 1);
        sEmojisMap.put(0x1f44b, 1);
        sEmojisMap.put(0x270b, 1);
        sEmojisMap.put(0x1f450, 1);
        sEmojisMap.put(0x1f446, 1);
        sEmojisMap.put(0x1f447, 1);
        sEmojisMap.put(0x1f449, 1);
        sEmojisMap.put(0x1f448, 1);
        sEmojisMap.put(0x1f64c, 1);
        sEmojisMap.put(0x1f64f, 1);
        sEmojisMap.put(0x261d, 1);
        sEmojisMap.put(0x1f44f, 1);
        sEmojisMap.put(0x1f4aa, 1);
        sEmojisMap.put(0x1f6b6, 1);
        sEmojisMap.put(0x1f3c3, 1);
        sEmojisMap.put(0x1f483, 1);
        sEmojisMap.put(0x1f46b, 1);
        sEmojisMap.put(0x1f46a, 1);
        sEmojisMap.put(0x1f46c, 1);
        sEmojisMap.put(0x1f46d, 1);
        sEmojisMap.put(0x1f48f, 1);
        sEmojisMap.put(0x1f491, 1);
        sEmojisMap.put(0x1f46f, 1);
        sEmojisMap.put(0x1f646, 1);
        sEmojisMap.put(0x1f645, 1);
        sEmojisMap.put(0x1f481, 1);
        sEmojisMap.put(0x1f64b, 1);
        sEmojisMap.put(0x1f486, 1);
        sEmojisMap.put(0x1f487, 1);
        sEmojisMap.put(0x1f485, 1);
        sEmojisMap.put(0x1f470, 1);
        sEmojisMap.put(0x1f64e, 1);
        sEmojisMap.put(0x1f64d, 1);
        sEmojisMap.put(0x1f647, 1);
        sEmojisMap.put(0x1f3a9, 1);
        sEmojisMap.put(0x1f451, 1);
        sEmojisMap.put(0x1f452, 1);
        sEmojisMap.put(0x1f45f, 1);
        sEmojisMap.put(0x1f45e, 1);
        sEmojisMap.put(0x1f461, 1);
        sEmojisMap.put(0x1f460, 1);
        sEmojisMap.put(0x1f462, 1);
        sEmojisMap.put(0x1f455, 1);
        sEmojisMap.put(0x1f454, 1);
        sEmojisMap.put(0x1f45a, 1);
        sEmojisMap.put(0x1f457, 1);
        sEmojisMap.put(0x1f3bd, 1);
        sEmojisMap.put(0x1f456, 1);
        sEmojisMap.put(0x1f458, 1);
        sEmojisMap.put(0x1f459, 1);
        sEmojisMap.put(0x1f4bc, 1);
        sEmojisMap.put(0x1f45c, 1);
        sEmojisMap.put(0x1f45d, 1);
        sEmojisMap.put(0x1f45b, 1);
        sEmojisMap.put(0x1f453, 1);
        sEmojisMap.put(0x1f380, 1);
        sEmojisMap.put(0x1f302, 1);
        sEmojisMap.put(0x1f484, 1);
        sEmojisMap.put(0x1f49b, 1);
        sEmojisMap.put(0x1f499, 1);
        sEmojisMap.put(0x1f49c, 1);
        sEmojisMap.put(0x1f49a, 1);
        sEmojisMap.put(0x2764, 1);
        sEmojisMap.put(0x1f494, 1);
        sEmojisMap.put(0x1f497, 1);
        sEmojisMap.put(0x1f493, 1);
        sEmojisMap.put(0x1f495, 1);
        sEmojisMap.put(0x1f496, 1);
        sEmojisMap.put(0x1f49e, 1);
        sEmojisMap.put(0x1f498, 1);
        sEmojisMap.put(0x1f48c, 1);
        sEmojisMap.put(0x1f48b, 1);
        sEmojisMap.put(0x1f48d, 1);
        sEmojisMap.put(0x1f48e, 1);
        sEmojisMap.put(0x1f464, 1);
        sEmojisMap.put(0x1f465, 1);
        sEmojisMap.put(0x1f4ac, 1);
        sEmojisMap.put(0x1f463, 1);
        sEmojisMap.put(0x1f4ad, 1);

        // Nature
        sEmojisMap.put(0x1f436, 1);
        sEmojisMap.put(0x1f43a, 1);
        sEmojisMap.put(0x1f431, 1);
        sEmojisMap.put(0x1f42d, 1);
        sEmojisMap.put(0x1f439, 1);
        sEmojisMap.put(0x1f430, 1);
        sEmojisMap.put(0x1f438, 1);
        sEmojisMap.put(0x1f42f, 1);
        sEmojisMap.put(0x1f428, 1);
        sEmojisMap.put(0x1f43b, 1);
        sEmojisMap.put(0x1f437, 1);
        sEmojisMap.put(0x1f43d, 1);
        sEmojisMap.put(0x1f42e, 1);
        sEmojisMap.put(0x1f417, 1);
        sEmojisMap.put(0x1f435, 1);
        sEmojisMap.put(0x1f412, 1);
        sEmojisMap.put(0x1f434, 1);
        sEmojisMap.put(0x1f411, 1);
        sEmojisMap.put(0x1f418, 1);
        sEmojisMap.put(0x1f43c, 1);
        sEmojisMap.put(0x1f427, 1);
        sEmojisMap.put(0x1f426, 1);
        sEmojisMap.put(0x1f424, 1);
        sEmojisMap.put(0x1f425, 1);
        sEmojisMap.put(0x1f423, 1);
        sEmojisMap.put(0x1f414, 1);
        sEmojisMap.put(0x1f40d, 1);
        sEmojisMap.put(0x1f422, 1);
        sEmojisMap.put(0x1f41b, 1);
        sEmojisMap.put(0x1f41d, 1);
        sEmojisMap.put(0x1f41c, 1);
        sEmojisMap.put(0x1f41e, 1);
        sEmojisMap.put(0x1f40c, 1);
        sEmojisMap.put(0x1f419, 1);
        sEmojisMap.put(0x1f41a, 1);
        sEmojisMap.put(0x1f420, 1);
        sEmojisMap.put(0x1f41f, 1);
        sEmojisMap.put(0x1f42c, 1);
        sEmojisMap.put(0x1f433, 1);
        sEmojisMap.put(0x1f40b, 1);
        sEmojisMap.put(0x1f404, 1);
        sEmojisMap.put(0x1f40f, 1);
        sEmojisMap.put(0x1f400, 1);
        sEmojisMap.put(0x1f403, 1);
        sEmojisMap.put(0x1f405, 1);
        sEmojisMap.put(0x1f407, 1);
        sEmojisMap.put(0x1f409, 1);
        sEmojisMap.put(0x1f40e, 1);
        sEmojisMap.put(0x1f410, 1);
        sEmojisMap.put(0x1f413, 1);
        sEmojisMap.put(0x1f415, 1);
        sEmojisMap.put(0x1f416, 1);
        sEmojisMap.put(0x1f401, 1);
        sEmojisMap.put(0x1f402, 1);
        sEmojisMap.put(0x1f432, 1);
        sEmojisMap.put(0x1f421, 1);
        sEmojisMap.put(0x1f40a, 1);
        sEmojisMap.put(0x1f42b, 1);
        sEmojisMap.put(0x1f42a, 1);
        sEmojisMap.put(0x1f406, 1);
        sEmojisMap.put(0x1f408, 1);
        sEmojisMap.put(0x1f429, 1);
        sEmojisMap.put(0x1f43e, 1);
        sEmojisMap.put(0x1f490, 1);
        sEmojisMap.put(0x1f338, 1);
        sEmojisMap.put(0x1f337, 1);
        sEmojisMap.put(0x1f340, 1);
        sEmojisMap.put(0x1f339, 1);
        sEmojisMap.put(0x1f33b, 1);
        sEmojisMap.put(0x1f33a, 1);
        sEmojisMap.put(0x1f341, 1);
        sEmojisMap.put(0x1f343, 1);
        sEmojisMap.put(0x1f342, 1);
        sEmojisMap.put(0x1f33f, 1);
        sEmojisMap.put(0x1f33e, 1);
        sEmojisMap.put(0x1f344, 1);
        sEmojisMap.put(0x1f335, 1);
        sEmojisMap.put(0x1f334, 1);
        sEmojisMap.put(0x1f332, 1);
        sEmojisMap.put(0x1f333, 1);
        sEmojisMap.put(0x1f330, 1);
        sEmojisMap.put(0x1f331, 1);
        sEmojisMap.put(0x1f33c, 1);
        sEmojisMap.put(0x1f310, 1);
        sEmojisMap.put(0x1f31e, 1);
        sEmojisMap.put(0x1f31d, 1);
        sEmojisMap.put(0x1f31a, 1);
        sEmojisMap.put(0x1f311, 1);
        sEmojisMap.put(0x1f312, 1);
        sEmojisMap.put(0x1f313, 1);
        sEmojisMap.put(0x1f314, 1);
        sEmojisMap.put(0x1f315, 1);
        sEmojisMap.put(0x1f316, 1);
        sEmojisMap.put(0x1f317, 1);
        sEmojisMap.put(0x1f318, 1);
        sEmojisMap.put(0x1f31c, 1);
        sEmojisMap.put(0x1f31b, 1);
        sEmojisMap.put(0x1f319, 1);
        sEmojisMap.put(0x1f30d, 1);
        sEmojisMap.put(0x1f30e, 1);
        sEmojisMap.put(0x1f30f, 1);
        sEmojisMap.put(0x1f30b, 1);
        sEmojisMap.put(0x1f30c, 1);
        sEmojisMap.put(0x1f320, 1); // TODO (rockerhieu) review this emoji
        sEmojisMap.put(0x2b50, 1);
        sEmojisMap.put(0x2600, 1);
        sEmojisMap.put(0x26c5, 1);
        sEmojisMap.put(0x2601, 1);
        sEmojisMap.put(0x26a1, 1);
        sEmojisMap.put(0x2614, 1);
        sEmojisMap.put(0x2744, 1);
        sEmojisMap.put(0x26c4, 1);
        sEmojisMap.put(0x1f300, 1);
        sEmojisMap.put(0x1f301, 1);
        sEmojisMap.put(0x1f308, 1);
        sEmojisMap.put(0x1f30a, 1);

        // Objects
        sEmojisMap.put(0x1f38d, 1);
        sEmojisMap.put(0x1f49d, 1);
        sEmojisMap.put(0x1f38e, 1);
        sEmojisMap.put(0x1f392, 1);
        sEmojisMap.put(0x1f393, 1);
        sEmojisMap.put(0x1f38f, 1);
        sEmojisMap.put(0x1f386, 1);
        sEmojisMap.put(0x1f387, 1);
        sEmojisMap.put(0x1f390, 1);
        sEmojisMap.put(0x1f391, 1);
        sEmojisMap.put(0x1f383, 1);
        sEmojisMap.put(0x1f47b, 1);
        sEmojisMap.put(0x1f385, 1);
        sEmojisMap.put(0x1f384, 1);
        sEmojisMap.put(0x1f381, 1);
        sEmojisMap.put(0x1f38b, 1);
        sEmojisMap.put(0x1f389, 1);
        sEmojisMap.put(0x1f38a, 1);
        sEmojisMap.put(0x1f388, 1);
        sEmojisMap.put(0x1f38c, 1);
        sEmojisMap.put(0x1f52e, 1);
        sEmojisMap.put(0x1f3a5, 1);
        sEmojisMap.put(0x1f4f7, 1);
        sEmojisMap.put(0x1f4f9, 1);
        sEmojisMap.put(0x1f4fc, 1);
        sEmojisMap.put(0x1f4bf, 1);
        sEmojisMap.put(0x1f4c0, 1);
        sEmojisMap.put(0x1f4bd, 1);
        sEmojisMap.put(0x1f4be, 1);
        sEmojisMap.put(0x1f4bb, 1);
        sEmojisMap.put(0x1f4f1, 1);
        sEmojisMap.put(0x260e, 1);
        sEmojisMap.put(0x1f4de, 1);
        sEmojisMap.put(0x1f4df, 1);
        sEmojisMap.put(0x1f4e0, 1);
        sEmojisMap.put(0x1f4e1, 1);
        sEmojisMap.put(0x1f4fa, 1);
        sEmojisMap.put(0x1f4fb, 1);
        sEmojisMap.put(0x1f50a, 1);
        sEmojisMap.put(0x1f509, 1);
        sEmojisMap.put(0x1f508, 1); // TODO (rockerhieu): review this emoji
        sEmojisMap.put(0x1f507, 1);
        sEmojisMap.put(0x1f514, 1);
        sEmojisMap.put(0x1f515, 1);
        sEmojisMap.put(0x1f4e2, 1);
        sEmojisMap.put(0x1f4e3, 1);
        sEmojisMap.put(0x23f3, 1);
        sEmojisMap.put(0x231b, 1);
        sEmojisMap.put(0x23f0, 1);
        sEmojisMap.put(0x231a, 1);
        sEmojisMap.put(0x1f513, 1);
        sEmojisMap.put(0x1f512, 1);
        sEmojisMap.put(0x1f50f, 1);
        sEmojisMap.put(0x1f510, 1);
        sEmojisMap.put(0x1f511, 1);
        sEmojisMap.put(0x1f50e, 1);
        sEmojisMap.put(0x1f4a1, 1);
        sEmojisMap.put(0x1f526, 1);
        sEmojisMap.put(0x1f506, 1);
        sEmojisMap.put(0x1f505, 1);
        sEmojisMap.put(0x1f50c, 1);
        sEmojisMap.put(0x1f50b, 1);
        sEmojisMap.put(0x1f50d, 1);
        sEmojisMap.put(0x1f6c1, 1);
        sEmojisMap.put(0x1f6c0, 1);
        sEmojisMap.put(0x1f6bf, 1);
        sEmojisMap.put(0x1f6bd, 1);
        sEmojisMap.put(0x1f527, 1);
        sEmojisMap.put(0x1f529, 1);
        sEmojisMap.put(0x1f528, 1);
        sEmojisMap.put(0x1f6aa, 1);
        sEmojisMap.put(0x1f6ac, 1);
        sEmojisMap.put(0x1f4a3, 1);
        sEmojisMap.put(0x1f52b, 1);
        sEmojisMap.put(0x1f52a, 1);
        sEmojisMap.put(0x1f48a, 1);
        sEmojisMap.put(0x1f489, 1);
        sEmojisMap.put(0x1f4b0, 1);
        sEmojisMap.put(0x1f4b4, 1);
        sEmojisMap.put(0x1f4b5, 1);
        sEmojisMap.put(0x1f4b7, 1);
        sEmojisMap.put(0x1f4b6, 1);
        sEmojisMap.put(0x1f4b3, 1);
        sEmojisMap.put(0x1f4b8, 1);
        sEmojisMap.put(0x1f4f2, 1);
        sEmojisMap.put(0x1f4e7, 1);
        sEmojisMap.put(0x1f4e5, 1);
        sEmojisMap.put(0x1f4e4, 1);
        sEmojisMap.put(0x2709, 1);
        sEmojisMap.put(0x1f4e9, 1);
        sEmojisMap.put(0x1f4e8, 1);
        sEmojisMap.put(0x1f4ef, 1);
        sEmojisMap.put(0x1f4eb, 1);
        sEmojisMap.put(0x1f4ea, 1);
        sEmojisMap.put(0x1f4ec, 1);
        sEmojisMap.put(0x1f4ed, 1);
        sEmojisMap.put(0x1f4ee, 1);
        sEmojisMap.put(0x1f4e6, 1);
        sEmojisMap.put(0x1f4dd, 1);
        sEmojisMap.put(0x1f4c4, 1);
        sEmojisMap.put(0x1f4c3, 1);
        sEmojisMap.put(0x1f4d1, 1);
        sEmojisMap.put(0x1f4ca, 1);
        sEmojisMap.put(0x1f4c8, 1);
        sEmojisMap.put(0x1f4c9, 1);
        sEmojisMap.put(0x1f4dc, 1);
        sEmojisMap.put(0x1f4cb, 1);
        sEmojisMap.put(0x1f4c5, 1);
        sEmojisMap.put(0x1f4c6, 1);
        sEmojisMap.put(0x1f4c7, 1);
        sEmojisMap.put(0x1f4c1, 1);
        sEmojisMap.put(0x1f4c2, 1);
        sEmojisMap.put(0x2702, 1);
        sEmojisMap.put(0x1f4cc, 1);
        sEmojisMap.put(0x1f4ce, 1);
        sEmojisMap.put(0x2712, 1);
        sEmojisMap.put(0x270f, 1);
        sEmojisMap.put(0x1f4cf, 1);
        sEmojisMap.put(0x1f4d0, 1);
        sEmojisMap.put(0x1f4d5, 1);
        sEmojisMap.put(0x1f4d7, 1);
        sEmojisMap.put(0x1f4d8, 1);
        sEmojisMap.put(0x1f4d9, 1);
        sEmojisMap.put(0x1f4d3, 1);
        sEmojisMap.put(0x1f4d4, 1);
        sEmojisMap.put(0x1f4d2, 1);
        sEmojisMap.put(0x1f4da, 1);
        sEmojisMap.put(0x1f4d6, 1);
        sEmojisMap.put(0x1f516, 1);
        sEmojisMap.put(0x1f4db, 1);
        sEmojisMap.put(0x1f52c, 1);
        sEmojisMap.put(0x1f52d, 1);
        sEmojisMap.put(0x1f4f0, 1);
        sEmojisMap.put(0x1f3a8, 1);
        sEmojisMap.put(0x1f3ac, 1);
        sEmojisMap.put(0x1f3a4, 1);
        sEmojisMap.put(0x1f3a7, 1);
        sEmojisMap.put(0x1f3bc, 1);
        sEmojisMap.put(0x1f3b5, 1);
        sEmojisMap.put(0x1f3b6, 1);
        sEmojisMap.put(0x1f3b9, 1);
        sEmojisMap.put(0x1f3bb, 1);
        sEmojisMap.put(0x1f3ba, 1);
        sEmojisMap.put(0x1f3b7, 1);
        sEmojisMap.put(0x1f3b8, 1);
        sEmojisMap.put(0x1f47e, 1);
        sEmojisMap.put(0x1f3ae, 1);
        sEmojisMap.put(0x1f0cf, 1);
        sEmojisMap.put(0x1f3b4, 1);
        sEmojisMap.put(0x1f004, 1);
        sEmojisMap.put(0x1f3b2, 1);
        sEmojisMap.put(0x1f3af, 1);
        sEmojisMap.put(0x1f3c8, 1);
        sEmojisMap.put(0x1f3c0, 1);
        sEmojisMap.put(0x26bd, 1);
        sEmojisMap.put(0x26be, 1);
        sEmojisMap.put(0x1f3be, 1);
        sEmojisMap.put(0x1f3b1, 1);
        sEmojisMap.put(0x1f3c9, 1);
        sEmojisMap.put(0x1f3b3, 1);
        sEmojisMap.put(0x26f3, 1);
        sEmojisMap.put(0x1f6b5, 1);
        sEmojisMap.put(0x1f6b4, 1);
        sEmojisMap.put(0x1f3c1, 1);
        sEmojisMap.put(0x1f3c7, 1);
        sEmojisMap.put(0x1f3c6, 1);
        sEmojisMap.put(0x1f3bf, 1);
        sEmojisMap.put(0x1f3c2, 1);
        sEmojisMap.put(0x1f3ca, 1);
        sEmojisMap.put(0x1f3c4, 1);
        sEmojisMap.put(0x1f3a3, 1);
        sEmojisMap.put(0x2615, 1);
        sEmojisMap.put(0x1f375, 1);
        sEmojisMap.put(0x1f376, 1);
        sEmojisMap.put(0x1f37c, 1);
        sEmojisMap.put(0x1f37a, 1);
        sEmojisMap.put(0x1f37b, 1);
        sEmojisMap.put(0x1f378, 1);
        sEmojisMap.put(0x1f379, 1);
        sEmojisMap.put(0x1f377, 1);
        sEmojisMap.put(0x1f374, 1);
        sEmojisMap.put(0x1f355, 1);
        sEmojisMap.put(0x1f354, 1);
        sEmojisMap.put(0x1f35f, 1);
        sEmojisMap.put(0x1f357, 1);
        sEmojisMap.put(0x1f356, 1);
        sEmojisMap.put(0x1f35d, 1);
        sEmojisMap.put(0x1f35b, 1);
        sEmojisMap.put(0x1f364, 1);
        sEmojisMap.put(0x1f371, 1);
        sEmojisMap.put(0x1f363, 1);
        sEmojisMap.put(0x1f365, 1);
        sEmojisMap.put(0x1f359, 1);
        sEmojisMap.put(0x1f358, 1);
        sEmojisMap.put(0x1f35a, 1);
        sEmojisMap.put(0x1f35c, 1);
        sEmojisMap.put(0x1f372, 1);
        sEmojisMap.put(0x1f362, 1);
        sEmojisMap.put(0x1f361, 1);
        sEmojisMap.put(0x1f373, 1);
        sEmojisMap.put(0x1f35e, 1);
        sEmojisMap.put(0x1f369, 1);
        sEmojisMap.put(0x1f36e, 1);
        sEmojisMap.put(0x1f366, 1);
        sEmojisMap.put(0x1f368, 1);
        sEmojisMap.put(0x1f367, 1);
        sEmojisMap.put(0x1f382, 1);
        sEmojisMap.put(0x1f370, 1);
        sEmojisMap.put(0x1f36a, 1);
        sEmojisMap.put(0x1f36b, 1);
        sEmojisMap.put(0x1f36c, 1);
        sEmojisMap.put(0x1f36d, 1);
        sEmojisMap.put(0x1f36f, 1);
        sEmojisMap.put(0x1f34e, 1);
        sEmojisMap.put(0x1f34f, 1);
        sEmojisMap.put(0x1f34a, 1);
        sEmojisMap.put(0x1f34b, 1);
        sEmojisMap.put(0x1f352, 1);
        sEmojisMap.put(0x1f347, 1);
        sEmojisMap.put(0x1f349, 1);
        sEmojisMap.put(0x1f353, 1);
        sEmojisMap.put(0x1f351, 1);
        sEmojisMap.put(0x1f348, 1);
        sEmojisMap.put(0x1f34c, 1);
        sEmojisMap.put(0x1f350, 1);
        sEmojisMap.put(0x1f34d, 1);
        sEmojisMap.put(0x1f360, 1);
        sEmojisMap.put(0x1f346, 1);
        sEmojisMap.put(0x1f345, 1);
        sEmojisMap.put(0x1f33d, 1);

        // Places
        sEmojisMap.put(0x1f3e0, 1);
        sEmojisMap.put(0x1f3e1, 1);
        sEmojisMap.put(0x1f3eb, 1);
        sEmojisMap.put(0x1f3e2, 1);
        sEmojisMap.put(0x1f3e3, 1);
        sEmojisMap.put(0x1f3e5, 1);
        sEmojisMap.put(0x1f3e6, 1);
        sEmojisMap.put(0x1f3ea, 1);
        sEmojisMap.put(0x1f3e9, 1);
        sEmojisMap.put(0x1f3e8, 1);
        sEmojisMap.put(0x1f492, 1);
        sEmojisMap.put(0x26ea, 1);
        sEmojisMap.put(0x1f3ec, 1);
        sEmojisMap.put(0x1f3e4, 1);
        sEmojisMap.put(0x1f307, 1);
        sEmojisMap.put(0x1f306, 1);
        sEmojisMap.put(0x1f3ef, 1);
        sEmojisMap.put(0x1f3f0, 1);
        sEmojisMap.put(0x26fa, 1);
        sEmojisMap.put(0x1f3ed, 1);
        sEmojisMap.put(0x1f5fc, 1);
        sEmojisMap.put(0x1f5fe, 1);
        sEmojisMap.put(0x1f5fb, 1);
        sEmojisMap.put(0x1f304, 1);
        sEmojisMap.put(0x1f305, 1);
        sEmojisMap.put(0x1f303, 1);
        sEmojisMap.put(0x1f5fd, 1);
        sEmojisMap.put(0x1f309, 1);
        sEmojisMap.put(0x1f3a0, 1);
        sEmojisMap.put(0x1f3a1, 1);
        sEmojisMap.put(0x26f2, 1);
        sEmojisMap.put(0x1f3a2, 1);
        sEmojisMap.put(0x1f6a2, 1);
        sEmojisMap.put(0x26f5, 1);
        sEmojisMap.put(0x1f6a4, 1);
        sEmojisMap.put(0x1f6a3, 1);
        sEmojisMap.put(0x2693, 1);
        sEmojisMap.put(0x1f680, 1);
        sEmojisMap.put(0x2708, 1);
        sEmojisMap.put(0x1f4ba, 1);
        sEmojisMap.put(0x1f681, 1);
        sEmojisMap.put(0x1f682, 1);
        sEmojisMap.put(0x1f68a, 1);
        sEmojisMap.put(0x1f689, 1);
        sEmojisMap.put(0x1f69e, 1);
        sEmojisMap.put(0x1f686, 1);
        sEmojisMap.put(0x1f684, 1);
        sEmojisMap.put(0x1f685, 1);
        sEmojisMap.put(0x1f688, 1);
        sEmojisMap.put(0x1f687, 1);
        sEmojisMap.put(0x1f69d, 1);
        sEmojisMap.put(0x1f68b, 1); // TODO (rockerhieu) review this emoji
        sEmojisMap.put(0x1f683, 1);
        sEmojisMap.put(0x1f68e, 1);
        sEmojisMap.put(0x1f68c, 1);
        sEmojisMap.put(0x1f68d, 1);
        sEmojisMap.put(0x1f699, 1);
        sEmojisMap.put(0x1f698, 1);
        sEmojisMap.put(0x1f697, 1);
        sEmojisMap.put(0x1f695, 1);
        sEmojisMap.put(0x1f696, 1);
        sEmojisMap.put(0x1f69b, 1);
        sEmojisMap.put(0x1f69a, 1);
        sEmojisMap.put(0x1f6a8, 1);
        sEmojisMap.put(0x1f693, 1);
        sEmojisMap.put(0x1f694, 1);
        sEmojisMap.put(0x1f692, 1);
        sEmojisMap.put(0x1f691, 1);
        sEmojisMap.put(0x1f690, 1);
        sEmojisMap.put(0x1f6b2, 1);
        sEmojisMap.put(0x1f6a1, 1);
        sEmojisMap.put(0x1f69f, 1);
        sEmojisMap.put(0x1f6a0, 1);
        sEmojisMap.put(0x1f69c, 1);
        sEmojisMap.put(0x1f488, 1);
        sEmojisMap.put(0x1f68f, 1);
        sEmojisMap.put(0x1f3ab, 1);
        sEmojisMap.put(0x1f6a6, 1);
        sEmojisMap.put(0x1f6a5, 1);
        sEmojisMap.put(0x26a0, 1);
        sEmojisMap.put(0x1f6a7, 1);
        sEmojisMap.put(0x1f530, 1);
        sEmojisMap.put(0x26fd, 1);
        sEmojisMap.put(0x1f3ee, 1);
        sEmojisMap.put(0x1f3b0, 1);
        sEmojisMap.put(0x2668, 1);
        sEmojisMap.put(0x1f5ff, 1);
        sEmojisMap.put(0x1f3aa, 1);
        sEmojisMap.put(0x1f3ad, 1);
        sEmojisMap.put(0x1f4cd, 1);
        sEmojisMap.put(0x1f6a9, 1);
//        Emoji.fromChars("\ud83c\uddef\ud83c\uddf5", 1);
//        Emoji.fromChars("\ud83c\uddf0\ud83c\uddf7", 1);
//        Emoji.fromChars("\ud83c\udde9\ud83c\uddea", 1);
//        Emoji.fromChars("\ud83c\udde8\ud83c\uddf3", 1);
//        Emoji.fromChars("\ud83c\uddfa\ud83c\uddf8", 1);
//        Emoji.fromChars("\ud83c\uddeb\ud83c\uddf7", 1);
//        Emoji.fromChars("\ud83c\uddea\ud83c\uddf8", 1);
//        Emoji.fromChars("\ud83c\uddee\ud83c\uddf9", 1);
//        Emoji.fromChars("\ud83c\uddf7\ud83c\uddfa", 1);
//        Emoji.fromChars("\ud83c\uddec\ud83c\udde7", 1);

        // Symbols
//        Emoji.fromChars("\u0031\u20e3"),
//        Emoji.fromChars("\u0032\u20e3"),
//        Emoji.fromChars("\u0033\u20e3"),
//        Emoji.fromChars("\u0034\u20e3"),
//        Emoji.fromChars("\u0035\u20e3"),
//        Emoji.fromChars("\u0036\u20e3"),
//        Emoji.fromChars("\u0037\u20e3"),
//        Emoji.fromChars("\u0038\u20e3"),
//        Emoji.fromChars("\u0039\u20e3"),
//        Emoji.fromChars("\u0030\u20e3"),
        sEmojisMap.put(0x1f51f, 1);
        sEmojisMap.put(0x1f522, 1);
//        Emoji.fromChars("\u0023\u20e3"),
        sEmojisMap.put(0x1f523, 1);
        sEmojisMap.put(0x2b06, 1);
        sEmojisMap.put(0x2b07, 1);
        sEmojisMap.put(0x2b05, 1);
        sEmojisMap.put(0x27a1, 1);
        sEmojisMap.put(0x1f520, 1);
        sEmojisMap.put(0x1f521, 1);
        sEmojisMap.put(0x1f524, 1);
        sEmojisMap.put(0x2197, 1);
        sEmojisMap.put(0x2196, 1);
        sEmojisMap.put(0x2198, 1);
        sEmojisMap.put(0x2199, 1);
        sEmojisMap.put(0x2194, 1);
        sEmojisMap.put(0x2195, 1);
        sEmojisMap.put(0x1f504, 1);
        sEmojisMap.put(0x25c0, 1);
        sEmojisMap.put(0x25b6, 1);
        sEmojisMap.put(0x1f53c, 1);
        sEmojisMap.put(0x1f53d, 1);
        sEmojisMap.put(0x21a9, 1);
        sEmojisMap.put(0x21aa, 1);
        sEmojisMap.put(0x2139, 1);
        sEmojisMap.put(0x23ea, 1);
        sEmojisMap.put(0x23e9, 1);
        sEmojisMap.put(0x23eb, 1);
        sEmojisMap.put(0x23ec, 1);
        sEmojisMap.put(0x2935, 1);
        sEmojisMap.put(0x2934, 1);
        sEmojisMap.put(0x1f197, 1);
        sEmojisMap.put(0x1f500, 1);
        sEmojisMap.put(0x1f501, 1);
        sEmojisMap.put(0x1f502, 1);
        sEmojisMap.put(0x1f195, 1);
        sEmojisMap.put(0x1f199, 1);
        sEmojisMap.put(0x1f192, 1);
        sEmojisMap.put(0x1f193, 1);
        sEmojisMap.put(0x1f196, 1);
        sEmojisMap.put(0x1f4f6, 1);
        sEmojisMap.put(0x1f3a6, 1);
        sEmojisMap.put(0x1f201, 1);
        sEmojisMap.put(0x1f22f, 1);
        sEmojisMap.put(0x1f233, 1);
        sEmojisMap.put(0x1f235, 1);
        sEmojisMap.put(0x1f234, 1);
        sEmojisMap.put(0x1f232, 1);
        sEmojisMap.put(0x1f250, 1);
        sEmojisMap.put(0x1f239, 1);
        sEmojisMap.put(0x1f23a, 1);
        sEmojisMap.put(0x1f236, 1);
        sEmojisMap.put(0x1f21a, 1);
        sEmojisMap.put(0x1f6bb, 1);
        sEmojisMap.put(0x1f6b9, 1);
        sEmojisMap.put(0x1f6ba, 1);
        sEmojisMap.put(0x1f6bc, 1);
        sEmojisMap.put(0x1f6be, 1);
        sEmojisMap.put(0x1f6b0, 1);
        sEmojisMap.put(0x1f6ae, 1);
        sEmojisMap.put(0x1f17f, 1);
        sEmojisMap.put(0x267f, 1);
        sEmojisMap.put(0x1f6ad, 1);
        sEmojisMap.put(0x1f237, 1);
        sEmojisMap.put(0x1f238, 1);
        sEmojisMap.put(0x1f202, 1);
        sEmojisMap.put(0x24c2, 1);
        sEmojisMap.put(0x1f6c2, 1);
        sEmojisMap.put(0x1f6c4, 1);
        sEmojisMap.put(0x1f6c5, 1);
        sEmojisMap.put(0x1f6c3, 1);
        sEmojisMap.put(0x1f251, 1);
        sEmojisMap.put(0x3299, 1);
        sEmojisMap.put(0x3297, 1);
        sEmojisMap.put(0x1f191, 1);
        sEmojisMap.put(0x1f198, 1);
        sEmojisMap.put(0x1f194, 1);
        sEmojisMap.put(0x1f6ab, 1);
        sEmojisMap.put(0x1f51e, 1);
        sEmojisMap.put(0x1f4f5, 1);
        sEmojisMap.put(0x1f6af, 1);
        sEmojisMap.put(0x1f6b1, 1);
        sEmojisMap.put(0x1f6b3, 1);
        sEmojisMap.put(0x1f6b7, 1);
        sEmojisMap.put(0x1f6b8, 1);
        sEmojisMap.put(0x26d4, 1);
        sEmojisMap.put(0x2733, 1);
        sEmojisMap.put(0x2747, 1);
        sEmojisMap.put(0x274e, 1);
        sEmojisMap.put(0x2705, 1);
        sEmojisMap.put(0x2734, 1);
        sEmojisMap.put(0x1f49f, 1);
        sEmojisMap.put(0x1f19a, 1);
        sEmojisMap.put(0x1f4f3, 1);
        sEmojisMap.put(0x1f4f4, 1);
        sEmojisMap.put(0x1f170, 1);
        sEmojisMap.put(0x1f171, 1);
        sEmojisMap.put(0x1f18e, 1);
        sEmojisMap.put(0x1f17e, 1);
        sEmojisMap.put(0x1f4a0, 1);
        sEmojisMap.put(0x27bf, 1);
        sEmojisMap.put(0x267b, 1);
        sEmojisMap.put(0x2648, 1);
        sEmojisMap.put(0x2649, 1);
        sEmojisMap.put(0x264a, 1);
        sEmojisMap.put(0x264b, 1);
        sEmojisMap.put(0x264c, 1);
        sEmojisMap.put(0x264d, 1);
        sEmojisMap.put(0x264e, 1);
        sEmojisMap.put(0x264f, 1);
        sEmojisMap.put(0x2650, 1);
        sEmojisMap.put(0x2651, 1);
        sEmojisMap.put(0x2652, 1);
        sEmojisMap.put(0x2653, 1);
        sEmojisMap.put(0x26ce, 1);
        sEmojisMap.put(0x1f52f, 1);
        sEmojisMap.put(0x1f3e7, 1);
        sEmojisMap.put(0x1f4b9, 1);
        sEmojisMap.put(0x1f4b2, 1);
        sEmojisMap.put(0x1f4b1, 1);
        sEmojisMap.put(0x00a9, 1);
        sEmojisMap.put(0x00ae, 1);
        sEmojisMap.put(0x2122, 1);
        sEmojisMap.put(0x274c, 1);
        sEmojisMap.put(0x203c, 1);
        sEmojisMap.put(0x2049, 1);
        sEmojisMap.put(0x2757, 1);
        sEmojisMap.put(0x2753, 1);
        sEmojisMap.put(0x2755, 1);
        sEmojisMap.put(0x2754, 1);
        sEmojisMap.put(0x2b55, 1);
        sEmojisMap.put(0x1f51d, 1);
        sEmojisMap.put(0x1f51a, 1);
        sEmojisMap.put(0x1f519, 1);
        sEmojisMap.put(0x1f51b, 1);
        sEmojisMap.put(0x1f51c, 1);
        sEmojisMap.put(0x1f503, 1);
        sEmojisMap.put(0x1f55b, 1);
        sEmojisMap.put(0x1f567, 1);
        sEmojisMap.put(0x1f550, 1);
        sEmojisMap.put(0x1f55c, 1);
        sEmojisMap.put(0x1f551, 1);
        sEmojisMap.put(0x1f55d, 1);
        sEmojisMap.put(0x1f552, 1);
        sEmojisMap.put(0x1f55e, 1);
        sEmojisMap.put(0x1f553, 1);
        sEmojisMap.put(0x1f55f, 1);
        sEmojisMap.put(0x1f554, 1);
        sEmojisMap.put(0x1f560, 1);
        sEmojisMap.put(0x1f555, 1);
        sEmojisMap.put(0x1f556, 1);
        sEmojisMap.put(0x1f557, 1);
        sEmojisMap.put(0x1f558, 1);
        sEmojisMap.put(0x1f559, 1);
        sEmojisMap.put(0x1f55a, 1);
        sEmojisMap.put(0x1f561, 1);
        sEmojisMap.put(0x1f562, 1);
        sEmojisMap.put(0x1f563, 1);
        sEmojisMap.put(0x1f564, 1);
        sEmojisMap.put(0x1f565, 1);
        sEmojisMap.put(0x1f566, 1);
        sEmojisMap.put(0x2716, 1);
        sEmojisMap.put(0x2795, 1);
        sEmojisMap.put(0x2796, 1);
        sEmojisMap.put(0x2797, 1);
        sEmojisMap.put(0x2660, 1);
        sEmojisMap.put(0x2665, 1);
        sEmojisMap.put(0x2663, 1);
        sEmojisMap.put(0x2666, 1);
        sEmojisMap.put(0x1f4ae, 1);
        sEmojisMap.put(0x1f4af, 1);
        sEmojisMap.put(0x2714, 1);
        sEmojisMap.put(0x2611, 1);
        sEmojisMap.put(0x1f518, 1);
        sEmojisMap.put(0x1f517, 1);
        sEmojisMap.put(0x27b0, 1);
        sEmojisMap.put(0x3030, 1);
        sEmojisMap.put(0x303d, 1);
        sEmojisMap.put(0x1f531, 1);
        sEmojisMap.put(0x25fc, 1);
        sEmojisMap.put(0x25fb, 1);
        sEmojisMap.put(0x25fe, 1);
        sEmojisMap.put(0x25fd, 1);
        sEmojisMap.put(0x25aa, 1);
        sEmojisMap.put(0x25ab, 1);
        sEmojisMap.put(0x1f53a, 1);
        sEmojisMap.put(0x1f532, 1);
        sEmojisMap.put(0x1f533, 1);
        sEmojisMap.put(0x26ab, 1);
        sEmojisMap.put(0x26aa, 1);
        sEmojisMap.put(0x1f534, 1);
        sEmojisMap.put(0x1f535, 1);
        sEmojisMap.put(0x1f53b, 1);
        sEmojisMap.put(0x2b1c, 1);
        sEmojisMap.put(0x2b1b, 1);
        sEmojisMap.put(0x1f536, 1);
        sEmojisMap.put(0x1f537, 1);
        sEmojisMap.put(0x1f538, 1);
        sEmojisMap.put(0x1f539, 1);


        sSoftbanksMap.put(0xe001, 1);
        sSoftbanksMap.put(0xe002, 1);
        sSoftbanksMap.put(0xe003, 1);
        sSoftbanksMap.put(0xe004, 1);
        sSoftbanksMap.put(0xe005, 1);
        sSoftbanksMap.put(0xe006, 1);
        sSoftbanksMap.put(0xe007, 1);
        sSoftbanksMap.put(0xe008, 1);
        sSoftbanksMap.put(0xe009, 1);
        sSoftbanksMap.put(0xe00a, 1);
        sSoftbanksMap.put(0xe00b, 1);
        sSoftbanksMap.put(0xe00c, 1);
        sSoftbanksMap.put(0xe00d, 1);
        sSoftbanksMap.put(0xe00e, 1);
        sSoftbanksMap.put(0xe00f, 1);
        sSoftbanksMap.put(0xe010, 1);
        sSoftbanksMap.put(0xe011, 1);
        sSoftbanksMap.put(0xe012, 1);
        sSoftbanksMap.put(0xe013, 1);
        sSoftbanksMap.put(0xe014, 1);
        sSoftbanksMap.put(0xe015, 1);
        sSoftbanksMap.put(0xe016, 1);
        sSoftbanksMap.put(0xe017, 1);
        sSoftbanksMap.put(0xe018, 1);
        sSoftbanksMap.put(0xe019, 1);
        sSoftbanksMap.put(0xe01a, 1);
        sSoftbanksMap.put(0xe01b, 1);
        sSoftbanksMap.put(0xe01c, 1);
        sSoftbanksMap.put(0xe01d, 1);
        sSoftbanksMap.put(0xe01e, 1);
        sSoftbanksMap.put(0xe01f, 1);
        sSoftbanksMap.put(0xe020, 1);
        sSoftbanksMap.put(0xe021, 1);
        sSoftbanksMap.put(0xe022, 1);
        sSoftbanksMap.put(0xe023, 1);
        sSoftbanksMap.put(0xe024, 1);
        sSoftbanksMap.put(0xe025, 1);
        sSoftbanksMap.put(0xe026, 1);
        sSoftbanksMap.put(0xe027, 1);
        sSoftbanksMap.put(0xe028, 1);
        sSoftbanksMap.put(0xe029, 1);
        sSoftbanksMap.put(0xe02a, 1);
        sSoftbanksMap.put(0xe02b, 1);
        sSoftbanksMap.put(0xe02c, 1);
        sSoftbanksMap.put(0xe02d, 1);
        sSoftbanksMap.put(0xe02e, 1);
        sSoftbanksMap.put(0xe02f, 1);
        sSoftbanksMap.put(0xe030, 1);
        sSoftbanksMap.put(0xe031, 1);
        sSoftbanksMap.put(0xe032, 1);
        sSoftbanksMap.put(0xe033, 1);
        sSoftbanksMap.put(0xe034, 1);
        sSoftbanksMap.put(0xe035, 1);
        sSoftbanksMap.put(0xe036, 1);
        sSoftbanksMap.put(0xe037, 1);
        sSoftbanksMap.put(0xe038, 1);
        sSoftbanksMap.put(0xe039, 1);
        sSoftbanksMap.put(0xe03a, 1);
        sSoftbanksMap.put(0xe03b, 1);
        sSoftbanksMap.put(0xe03c, 1);
        sSoftbanksMap.put(0xe03d, 1);
        sSoftbanksMap.put(0xe03e, 1);
        sSoftbanksMap.put(0xe03f, 1);
        sSoftbanksMap.put(0xe040, 1);
        sSoftbanksMap.put(0xe041, 1);
        sSoftbanksMap.put(0xe042, 1);
        sSoftbanksMap.put(0xe043, 1);
        sSoftbanksMap.put(0xe044, 1);
        sSoftbanksMap.put(0xe045, 1);
        sSoftbanksMap.put(0xe046, 1);
        sSoftbanksMap.put(0xe047, 1);
        sSoftbanksMap.put(0xe048, 1);
        sSoftbanksMap.put(0xe049, 1);
        sSoftbanksMap.put(0xe04a, 1);
        sSoftbanksMap.put(0xe04b, 1);
        sSoftbanksMap.put(0xe04c, 1);
        sSoftbanksMap.put(0xe04d, 1);
        sSoftbanksMap.put(0xe04e, 1);
        sSoftbanksMap.put(0xe04f, 1);
        sSoftbanksMap.put(0xe050, 1);
        sSoftbanksMap.put(0xe051, 1);
        sSoftbanksMap.put(0xe052, 1);
        sSoftbanksMap.put(0xe053, 1);
        sSoftbanksMap.put(0xe054, 1);
        sSoftbanksMap.put(0xe055, 1);
        sSoftbanksMap.put(0xe056, 1);
        sSoftbanksMap.put(0xe057, 1);
        sSoftbanksMap.put(0xe058, 1);
        sSoftbanksMap.put(0xe059, 1);
        sSoftbanksMap.put(0xe05a, 1);
        sSoftbanksMap.put(0xe101, 1);
        sSoftbanksMap.put(0xe102, 1);
        sSoftbanksMap.put(0xe103, 1);
        sSoftbanksMap.put(0xe104, 1);
        sSoftbanksMap.put(0xe105, 1);
        sSoftbanksMap.put(0xe106, 1);
        sSoftbanksMap.put(0xe107, 1);
        sSoftbanksMap.put(0xe108, 1);
        sSoftbanksMap.put(0xe109, 1);
        sSoftbanksMap.put(0xe10a, 1);
        sSoftbanksMap.put(0xe10b, 1);
        sSoftbanksMap.put(0xe10c, 1);
        sSoftbanksMap.put(0xe10d, 1);
        sSoftbanksMap.put(0xe10e, 1);
        sSoftbanksMap.put(0xe10f, 1);
        sSoftbanksMap.put(0xe110, 1);
        sSoftbanksMap.put(0xe111, 1);
        sSoftbanksMap.put(0xe112, 1);
        sSoftbanksMap.put(0xe113, 1);
        sSoftbanksMap.put(0xe114, 1);
        sSoftbanksMap.put(0xe115, 1);
        sSoftbanksMap.put(0xe116, 1);
        sSoftbanksMap.put(0xe117, 1);
        sSoftbanksMap.put(0xe118, 1);
        sSoftbanksMap.put(0xe119, 1);
        sSoftbanksMap.put(0xe11a, 1);
        sSoftbanksMap.put(0xe11b, 1);
        sSoftbanksMap.put(0xe11c, 1);
        sSoftbanksMap.put(0xe11d, 1);
        sSoftbanksMap.put(0xe11e, 1);
        sSoftbanksMap.put(0xe11f, 1);
        sSoftbanksMap.put(0xe120, 1);
        sSoftbanksMap.put(0xe121, 1);
        sSoftbanksMap.put(0xe122, 1);
        sSoftbanksMap.put(0xe123, 1);
        sSoftbanksMap.put(0xe124, 1);
        sSoftbanksMap.put(0xe125, 1);
        sSoftbanksMap.put(0xe126, 1);
        sSoftbanksMap.put(0xe127, 1);
        sSoftbanksMap.put(0xe128, 1);
        sSoftbanksMap.put(0xe129, 1);
        sSoftbanksMap.put(0xe12a, 1);
        sSoftbanksMap.put(0xe12b, 1);
        sSoftbanksMap.put(0xe12c, 1);
        sSoftbanksMap.put(0xe12d, 1);
        sSoftbanksMap.put(0xe12e, 1);
        sSoftbanksMap.put(0xe12f, 1);
        sSoftbanksMap.put(0xe130, 1);
        sSoftbanksMap.put(0xe131, 1);
        sSoftbanksMap.put(0xe132, 1);
        sSoftbanksMap.put(0xe133, 1);
        sSoftbanksMap.put(0xe134, 1);
        sSoftbanksMap.put(0xe135, 1);
        sSoftbanksMap.put(0xe136, 1);
        sSoftbanksMap.put(0xe137, 1);
        sSoftbanksMap.put(0xe138, 1);
        sSoftbanksMap.put(0xe139, 1);
        sSoftbanksMap.put(0xe13a, 1);
        sSoftbanksMap.put(0xe13b, 1);
        sSoftbanksMap.put(0xe13c, 1);
        sSoftbanksMap.put(0xe13d, 1);
        sSoftbanksMap.put(0xe13e, 1);
        sSoftbanksMap.put(0xe13f, 1);
        sSoftbanksMap.put(0xe140, 1);
        sSoftbanksMap.put(0xe141, 1);
        sSoftbanksMap.put(0xe142, 1);
        sSoftbanksMap.put(0xe143, 1);
        sSoftbanksMap.put(0xe144, 1);
        sSoftbanksMap.put(0xe145, 1);
        sSoftbanksMap.put(0xe146, 1);
        sSoftbanksMap.put(0xe147, 1);
        sSoftbanksMap.put(0xe148, 1);
        sSoftbanksMap.put(0xe149, 1);
        sSoftbanksMap.put(0xe14a, 1);
        sSoftbanksMap.put(0xe14b, 1);
        sSoftbanksMap.put(0xe14c, 1);
        sSoftbanksMap.put(0xe14d, 1);
        sSoftbanksMap.put(0xe14e, 1);
        sSoftbanksMap.put(0xe14f, 1);
        sSoftbanksMap.put(0xe150, 1);
        sSoftbanksMap.put(0xe151, 1);
        sSoftbanksMap.put(0xe152, 1);
        sSoftbanksMap.put(0xe153, 1);
        sSoftbanksMap.put(0xe154, 1);
        sSoftbanksMap.put(0xe155, 1);
        sSoftbanksMap.put(0xe156, 1);
        sSoftbanksMap.put(0xe157, 1);
        sSoftbanksMap.put(0xe158, 1);
        sSoftbanksMap.put(0xe159, 1);
        sSoftbanksMap.put(0xe15a, 1);
        sSoftbanksMap.put(0xe201, 1);
        sSoftbanksMap.put(0xe202, 1);
        sSoftbanksMap.put(0xe203, 1);
        sSoftbanksMap.put(0xe204, 1);
        sSoftbanksMap.put(0xe205, 1);
        sSoftbanksMap.put(0xe206, 1);
        sSoftbanksMap.put(0xe207, 1);
        sSoftbanksMap.put(0xe208, 1);
        sSoftbanksMap.put(0xe209, 1);
        sSoftbanksMap.put(0xe20a, 1);
        sSoftbanksMap.put(0xe20b, 1);
        sSoftbanksMap.put(0xe20c, 1);
        sSoftbanksMap.put(0xe20d, 1);
        sSoftbanksMap.put(0xe20e, 1);
        sSoftbanksMap.put(0xe20f, 1);
        sSoftbanksMap.put(0xe210, 1);
        sSoftbanksMap.put(0xe211, 1);
        sSoftbanksMap.put(0xe212, 1);
        sSoftbanksMap.put(0xe213, 1);
        sSoftbanksMap.put(0xe214, 1);
        sSoftbanksMap.put(0xe215, 1);
        sSoftbanksMap.put(0xe216, 1);
        sSoftbanksMap.put(0xe217, 1);
        sSoftbanksMap.put(0xe218, 1);
        sSoftbanksMap.put(0xe219, 1);
        sSoftbanksMap.put(0xe21a, 1);
        sSoftbanksMap.put(0xe21b, 1);
        sSoftbanksMap.put(0xe21c, 1);
        sSoftbanksMap.put(0xe21d, 1);
        sSoftbanksMap.put(0xe21e, 1);
        sSoftbanksMap.put(0xe21f, 1);
        sSoftbanksMap.put(0xe220, 1);
        sSoftbanksMap.put(0xe221, 1);
        sSoftbanksMap.put(0xe222, 1);
        sSoftbanksMap.put(0xe223, 1);
        sSoftbanksMap.put(0xe224, 1);
        sSoftbanksMap.put(0xe225, 1);
        sSoftbanksMap.put(0xe226, 1);
        sSoftbanksMap.put(0xe227, 1);
        sSoftbanksMap.put(0xe228, 1);
        sSoftbanksMap.put(0xe229, 1);
        sSoftbanksMap.put(0xe22a, 1);
        sSoftbanksMap.put(0xe22b, 1);
        sSoftbanksMap.put(0xe22c, 1);
        sSoftbanksMap.put(0xe22d, 1);
        sSoftbanksMap.put(0xe22e, 1);
        sSoftbanksMap.put(0xe22f, 1);
        sSoftbanksMap.put(0xe230, 1);
        sSoftbanksMap.put(0xe231, 1);
        sSoftbanksMap.put(0xe232, 1);
        sSoftbanksMap.put(0xe233, 1);
        sSoftbanksMap.put(0xe234, 1);
        sSoftbanksMap.put(0xe235, 1);
        sSoftbanksMap.put(0xe236, 1);
        sSoftbanksMap.put(0xe237, 1);
        sSoftbanksMap.put(0xe238, 1);
        sSoftbanksMap.put(0xe239, 1);
        sSoftbanksMap.put(0xe23a, 1);
        sSoftbanksMap.put(0xe23b, 1);
        sSoftbanksMap.put(0xe23c, 1);
        sSoftbanksMap.put(0xe23d, 1);
        sSoftbanksMap.put(0xe23e, 1);
        sSoftbanksMap.put(0xe23f, 1);
        sSoftbanksMap.put(0xe240, 1);
        sSoftbanksMap.put(0xe241, 1);
        sSoftbanksMap.put(0xe242, 1);
        sSoftbanksMap.put(0xe243, 1);
        sSoftbanksMap.put(0xe244, 1);
        sSoftbanksMap.put(0xe245, 1);
        sSoftbanksMap.put(0xe246, 1);
        sSoftbanksMap.put(0xe247, 1);
        sSoftbanksMap.put(0xe248, 1);
        sSoftbanksMap.put(0xe249, 1);
        sSoftbanksMap.put(0xe24a, 1);
        sSoftbanksMap.put(0xe24b, 1);
        sSoftbanksMap.put(0xe24c, 1);
        sSoftbanksMap.put(0xe24d, 1);
        sSoftbanksMap.put(0xe24e, 1);
        sSoftbanksMap.put(0xe24f, 1);
        sSoftbanksMap.put(0xe250, 1);
        sSoftbanksMap.put(0xe251, 1);
        sSoftbanksMap.put(0xe252, 1);
        sSoftbanksMap.put(0xe253, 1);
        sSoftbanksMap.put(0xe301, 1);
        sSoftbanksMap.put(0xe302, 1);
        sSoftbanksMap.put(0xe303, 1);
        sSoftbanksMap.put(0xe304, 1);
        sSoftbanksMap.put(0xe305, 1);
        sSoftbanksMap.put(0xe306, 1);
        sSoftbanksMap.put(0xe307, 1);
        sSoftbanksMap.put(0xe308, 1);
        sSoftbanksMap.put(0xe309, 1);
        sSoftbanksMap.put(0xe30a, 1);
        sSoftbanksMap.put(0xe30b, 1);
        sSoftbanksMap.put(0xe30c, 1);
        sSoftbanksMap.put(0xe30d, 1);
        sSoftbanksMap.put(0xe30e, 1);
        sSoftbanksMap.put(0xe30f, 1);
        sSoftbanksMap.put(0xe310, 1);
        sSoftbanksMap.put(0xe311, 1);
        sSoftbanksMap.put(0xe312, 1);
        sSoftbanksMap.put(0xe313, 1);
        sSoftbanksMap.put(0xe314, 1);
        sSoftbanksMap.put(0xe315, 1);
        sSoftbanksMap.put(0xe316, 1);
        sSoftbanksMap.put(0xe317, 1);
        sSoftbanksMap.put(0xe318, 1);
        sSoftbanksMap.put(0xe319, 1);
        sSoftbanksMap.put(0xe31a, 1);
        sSoftbanksMap.put(0xe31b, 1);
        sSoftbanksMap.put(0xe31c, 1);
        sSoftbanksMap.put(0xe31d, 1);
        sSoftbanksMap.put(0xe31e, 1);
        sSoftbanksMap.put(0xe31f, 1);
        sSoftbanksMap.put(0xe320, 1);
        sSoftbanksMap.put(0xe321, 1);
        sSoftbanksMap.put(0xe322, 1);
        sSoftbanksMap.put(0xe323, 1);
        sSoftbanksMap.put(0xe324, 1);
        sSoftbanksMap.put(0xe325, 1);
        sSoftbanksMap.put(0xe326, 1);
        sSoftbanksMap.put(0xe327, 1);
        sSoftbanksMap.put(0xe328, 1);
        sSoftbanksMap.put(0xe329, 1);
        sSoftbanksMap.put(0xe32a, 1);
        sSoftbanksMap.put(0xe32b, 1);
        sSoftbanksMap.put(0xe32c, 1);
        sSoftbanksMap.put(0xe32d, 1);
        sSoftbanksMap.put(0xe32e, 1);
        sSoftbanksMap.put(0xe32f, 1);
        sSoftbanksMap.put(0xe330, 1);
        sSoftbanksMap.put(0xe331, 1);
        sSoftbanksMap.put(0xe332, 1);
        sSoftbanksMap.put(0xe333, 1);
        sSoftbanksMap.put(0xe334, 1);
        sSoftbanksMap.put(0xe335, 1);
        sSoftbanksMap.put(0xe336, 1);
        sSoftbanksMap.put(0xe337, 1);
        sSoftbanksMap.put(0xe338, 1);
        sSoftbanksMap.put(0xe339, 1);
        sSoftbanksMap.put(0xe33a, 1);
        sSoftbanksMap.put(0xe33b, 1);
        sSoftbanksMap.put(0xe33c, 1);
        sSoftbanksMap.put(0xe33d, 1);
        sSoftbanksMap.put(0xe33e, 1);
        sSoftbanksMap.put(0xe33f, 1);
        sSoftbanksMap.put(0xe340, 1);
        sSoftbanksMap.put(0xe341, 1);
        sSoftbanksMap.put(0xe342, 1);
        sSoftbanksMap.put(0xe343, 1);
        sSoftbanksMap.put(0xe344, 1);
        sSoftbanksMap.put(0xe345, 1);
        sSoftbanksMap.put(0xe346, 1);
        sSoftbanksMap.put(0xe347, 1);
        sSoftbanksMap.put(0xe348, 1);
        sSoftbanksMap.put(0xe349, 1);
        sSoftbanksMap.put(0xe34a, 1);
        sSoftbanksMap.put(0xe34b, 1);
        sSoftbanksMap.put(0xe34c, 1);
        sSoftbanksMap.put(0xe34d, 1);
        sSoftbanksMap.put(0xe401, 1);
        sSoftbanksMap.put(0xe402, 1);
        sSoftbanksMap.put(0xe403, 1);
        sSoftbanksMap.put(0xe404, 1);
        sSoftbanksMap.put(0xe405, 1);
        sSoftbanksMap.put(0xe406, 1);
        sSoftbanksMap.put(0xe407, 1);
        sSoftbanksMap.put(0xe408, 1);
        sSoftbanksMap.put(0xe409, 1);
        sSoftbanksMap.put(0xe40a, 1);
        sSoftbanksMap.put(0xe40b, 1);
        sSoftbanksMap.put(0xe40c, 1);
        sSoftbanksMap.put(0xe40d, 1);
        sSoftbanksMap.put(0xe40e, 1);
        sSoftbanksMap.put(0xe40f, 1);
        sSoftbanksMap.put(0xe410, 1);
        sSoftbanksMap.put(0xe411, 1);
        sSoftbanksMap.put(0xe412, 1);
        sSoftbanksMap.put(0xe413, 1);
        sSoftbanksMap.put(0xe414, 1);
        sSoftbanksMap.put(0xe415, 1);
        sSoftbanksMap.put(0xe416, 1);
        sSoftbanksMap.put(0xe417, 1);
        sSoftbanksMap.put(0xe418, 1);
        sSoftbanksMap.put(0xe419, 1);
        sSoftbanksMap.put(0xe41a, 1);
        sSoftbanksMap.put(0xe41b, 1);
        sSoftbanksMap.put(0xe41c, 1);
        sSoftbanksMap.put(0xe41d, 1);
        sSoftbanksMap.put(0xe41e, 1);
        sSoftbanksMap.put(0xe41f, 1);
        sSoftbanksMap.put(0xe420, 1);
        sSoftbanksMap.put(0xe421, 1);
        sSoftbanksMap.put(0xe422, 1);
        sSoftbanksMap.put(0xe423, 1);
        sSoftbanksMap.put(0xe424, 1);
        sSoftbanksMap.put(0xe425, 1);
        sSoftbanksMap.put(0xe426, 1);
        sSoftbanksMap.put(0xe427, 1);
        sSoftbanksMap.put(0xe428, 1);
        sSoftbanksMap.put(0xe429, 1);
        sSoftbanksMap.put(0xe42a, 1);
        sSoftbanksMap.put(0xe42b, 1);
        sSoftbanksMap.put(0xe42c, 1);
        sSoftbanksMap.put(0xe42d, 1);
        sSoftbanksMap.put(0xe42e, 1);
        sSoftbanksMap.put(0xe42f, 1);
        sSoftbanksMap.put(0xe430, 1);
        sSoftbanksMap.put(0xe431, 1);
        sSoftbanksMap.put(0xe432, 1);
        sSoftbanksMap.put(0xe433, 1);
        sSoftbanksMap.put(0xe434, 1);
        sSoftbanksMap.put(0xe435, 1);
        sSoftbanksMap.put(0xe436, 1);
        sSoftbanksMap.put(0xe437, 1);
        sSoftbanksMap.put(0xe438, 1);
        sSoftbanksMap.put(0xe439, 1);
        sSoftbanksMap.put(0xe43a, 1);
        sSoftbanksMap.put(0xe43b, 1);
        sSoftbanksMap.put(0xe43c, 1);
        sSoftbanksMap.put(0xe43d, 1);
        sSoftbanksMap.put(0xe43e, 1);
        sSoftbanksMap.put(0xe43f, 1);
        sSoftbanksMap.put(0xe440, 1);
        sSoftbanksMap.put(0xe441, 1);
        sSoftbanksMap.put(0xe442, 1);
        sSoftbanksMap.put(0xe443, 1);
        sSoftbanksMap.put(0xe444, 1);
        sSoftbanksMap.put(0xe445, 1);
        sSoftbanksMap.put(0xe446, 1);
        sSoftbanksMap.put(0xe447, 1);
        sSoftbanksMap.put(0xe448, 1);
        sSoftbanksMap.put(0xe449, 1);
        sSoftbanksMap.put(0xe44a, 1);
        sSoftbanksMap.put(0xe44b, 1);
        sSoftbanksMap.put(0xe44b, 1);
        sSoftbanksMap.put(0xe44c, 1);
        sSoftbanksMap.put(0xe501, 1);
        sSoftbanksMap.put(0xe502, 1);
        sSoftbanksMap.put(0xe503, 1);
        sSoftbanksMap.put(0xe504, 1);
        sSoftbanksMap.put(0xe505, 1);
        sSoftbanksMap.put(0xe506, 1);
        sSoftbanksMap.put(0xe507, 1);
        sSoftbanksMap.put(0xe508, 1);
        sSoftbanksMap.put(0xe509, 1);
        sSoftbanksMap.put(0xe50b, 1);
        sSoftbanksMap.put(0xe50c, 1);
        sSoftbanksMap.put(0xe50d, 1);
        sSoftbanksMap.put(0xe50e, 1);
        sSoftbanksMap.put(0xe50f, 1);
        sSoftbanksMap.put(0xe510, 1);
        sSoftbanksMap.put(0xe511, 1);
        sSoftbanksMap.put(0xe512, 1);
        sSoftbanksMap.put(0xe513, 1);
        sSoftbanksMap.put(0xe514, 1);
        sSoftbanksMap.put(0xe515, 1);
        sSoftbanksMap.put(0xe516, 1);
        sSoftbanksMap.put(0xe517, 1);
        sSoftbanksMap.put(0xe518, 1);
        sSoftbanksMap.put(0xe519, 1);
        sSoftbanksMap.put(0xe51a, 1);
        sSoftbanksMap.put(0xe51b, 1);
        sSoftbanksMap.put(0xe51c, 1);
        sSoftbanksMap.put(0xe51d, 1);
        sSoftbanksMap.put(0xe51e, 1);
        sSoftbanksMap.put(0xe51f, 1);
        sSoftbanksMap.put(0xe520, 1);
        sSoftbanksMap.put(0xe521, 1);
        sSoftbanksMap.put(0xe522, 1);
        sSoftbanksMap.put(0xe523, 1);
        sSoftbanksMap.put(0xe524, 1);
        sSoftbanksMap.put(0xe525, 1);
        sSoftbanksMap.put(0xe526, 1);
        sSoftbanksMap.put(0xe527, 1);
        sSoftbanksMap.put(0xe528, 1);
        sSoftbanksMap.put(0xe529, 1);
        sSoftbanksMap.put(0xe52a, 1);
        sSoftbanksMap.put(0xe52b, 1);
        sSoftbanksMap.put(0xe52c, 1);
        sSoftbanksMap.put(0xe52d, 1);
        sSoftbanksMap.put(0xe52e, 1);
        sSoftbanksMap.put(0xe52f, 1);
        sSoftbanksMap.put(0xe530, 1);
        sSoftbanksMap.put(0xe531, 1);
        sSoftbanksMap.put(0xe532, 1);
        sSoftbanksMap.put(0xe533, 1);
        sSoftbanksMap.put(0xe534, 1);
        sSoftbanksMap.put(0xe535, 1);
        sSoftbanksMap.put(0xe536, 1);
        sSoftbanksMap.put(0xe537, 1);
    }

    private static int getEmojiResource(int codePoint) {
        return sEmojisMap.get(codePoint);
    }

    private static int getSoftbankEmojiResource(char c) {
        return sSoftbanksMap.get(c);
    }

    private static boolean isSoftBankEmoji(char c) {
        return ((c >> 12) == 0xe);
    }

    public static boolean isOnlyEmoji(CharSequence text) {
        if (TextUtils.isEmpty(text)) {
            return false;
        }

        int skip;
        int length = text.length();
        for (int i = 0; i < text.length(); i += skip) {

            int icon = 0;
            char c = text.charAt(i);
            skip = 0;

            if (isSoftBankEmoji(c)) {
                icon = getSoftbankEmojiResource(c);
                skip = icon == 0 ? 0 : 1;
            }

            if (icon == 0) {
                int unicode = Character.codePointAt(text, i);
                skip = Character.charCount(unicode);

                if (unicode > 0xff) {
                    icon = getEmojiResource(unicode);
                }

                if (icon == 0 && i + skip < length) {
                    int followUnicode = Character.codePointAt(text, i + skip);
                    if (followUnicode == 0x20e3) {
                        int followSkip = Character.charCount(followUnicode);
                        switch (unicode) {
                            case 0x0031:
                            case 0x0032:
                            case 0x0033:
                            case 0x0034:
                            case 0x0035:
                            case 0x0036:
                            case 0x0037:
                            case 0x0038:
                            case 0x0039:
                            case 0x0030:
                            case 0x0023:
                                icon = 1;
                                break;
                            default:
                                followSkip = 0;
                                break;
                        }
                        skip += followSkip;
                    } else {
                        int followSkip = Character.charCount(followUnicode);
                        switch (unicode) {
                            case 0x1f1ef:
                                icon = (followUnicode == 0x1f1f5) ? 1 : 0;
                                break;
                            case 0x1f1fa:
                                icon = (followUnicode == 0x1f1f8) ? 1 : 0;
                                break;
                            case 0x1f1eb:
                                icon = (followUnicode == 0x1f1f7) ? 1 : 0;
                                break;
                            case 0x1f1e9:
                                icon = (followUnicode == 0x1f1ea) ? 1 : 0;
                                break;
                            case 0x1f1ee:
                                icon = (followUnicode == 0x1f1f9) ? 1 : 0;
                                break;
                            case 0x1f1ec:
                                icon = (followUnicode == 0x1f1e7) ? 1 : 0;
                                break;
                            case 0x1f1ea:
                                icon = (followUnicode == 0x1f1f8) ? 1 : 0;
                                break;
                            case 0x1f1f7:
                                icon = (followUnicode == 0x1f1fa) ? 1 : 0;
                                break;
                            case 0x1f1e8:
                                icon = (followUnicode == 0x1f1f3) ? 1 : 0;
                                break;
                            case 0x1f1f0:
                                icon = (followUnicode == 0x1f1f7) ? 1 : 0;
                                break;
                            default:
                                followSkip = 0;
                                break;
                        }
                        skip += followSkip;
                    }
                }
            }

            if (icon == 0 && c != ' ') {
                return false;
            }
        }

        return true;
    }
}
